import axios from 'axios'
import { BASE_URL } from './url.js'

import { getToken, removeToken } from './auth'


/* 
  1 在 api.js 中，添加请求拦截器。
  2 获取到当前请求的接口路径（url）。
  3 判断接口路径，是否是以 /user 开头，并且不是登录或注册接口（只给需要的接口添加请求头）。
  4 如果是，就添加请求头 Authorization。
  5 添加响应拦截器。
  6 判断返回值中的状态码。
  7 如果是 400，表示 token 超时或异常，直接移除 token。
*/

// API 具有axios 所有的功能
const API = axios.create({

  // `baseURL` 将自动加在 `url` 前面，除非 `url` 是一个绝对 URL。
  // 它可以通过设置一个 `baseURL` 便于为 axios 实例的方法传递相对 URL
  baseURL: BASE_URL,
  //  timeout: 0, // 默认值是 `0` (永不超时)
  // `withCredentials` 表示跨域请求时是否需要使用凭证
  // withCredentials: true, // default  默认 false  




})



// 创建实例后修改默认值
// instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;




// AUTH_TOKEN 一旦登录成功了   AUTH_TOKEN存储在本地缓存  一进来需要去从本地缓存里面获取 判断有有没有AUTH_TOKEN


// 添加请求拦截器
API.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // alert('confing')
  // console.log('config', config)



  //     data: "{\"area\":\"AREA|dbf46d32-7e76-1196\"}"
  // headers: {Accept: "application/json, text/plain, */*", Content-Type: "application/json;charset=utf-8"}
  // maxBodyLength: -1
  // maxContentLength: -1
  // method: "get"
  // timeout: 2000
  // transformRequest: [ƒ]
  // transformResponse: [ƒ]
  // url: "/home/groups"

  let { method, data, url } = config
  console.log(method)
  console.log(data)

  // 判断 对象 
  //如果对象为空 
  // 与4方法类似，是ES6的新方法, 返回值也是对象中属性名组成的数组
  // var data = {};
  // var arr = Object.keys(data);
  // alert(arr.length == 0);//true
  
  



  if (method === 'get' ) {
  
    let str = ''



    for (  var  key in data) {
      
      str += key + '=' + data[key]
    }
    console.log(str)

    url = url + '?' + str

  }else   if(method==='post'){
    // 默认post 不需要处理
  }


  console.log("url",url)
 


  // /user//user/favorites
  // true  ! false   !false
  //  /user/login
  // true    !false     !true  

  if (url.startsWith('/user') && !url.startsWith('/user/registered') && !url.endsWith('/user/login')) {
      config.headers.common['authorization'] = getToken();
  }

  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});



// 添加响应拦截器
API.interceptors.response.use(function (response) {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么

  let { status } = response.data;
  // switch (status) {
  //   case 400:
  //     // alert('400')
  //     removeToken()
  //     break;

  // }
  console.log(response)

  return response.data; // 直接获取data里面的数据
}, function (error) {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  return Promise.reject(error);  // 比较规范的写法
});





//最后对外暴露 
export {
  API
}



